<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="./ajax.js"></script>
</head>
<body>
    <script>
        // Generator 配合 Promise 的异步方案

        function * main(){
            try {
                const users = yield ajax('/part-1/javascript-asyn/code/test.json')
                console.log(users)

                const test = yield Promise.resolve('sssss')
                console.log(test)
            } catch (error) {
                console.log(error)
            }
            

        }
        // const g = main()
        // const result = g.next()
       
        // result.value.then(data=>{
        //     const result2 = g.next(data)
        //     if(result2.done) return

        //     result2.value.then(data=>{
        //         const result3 =  g.next(data)
        //         if(result3.done) return
        //         result3.value.then(data=> {
        //             g.next(data)
        //         } )
        //     })
        // })

        // // 递归方法
        // function handleResult (result){
        //     if(result.done) return //当done结束后就返回不继续往下执行
        //     result.value.then(data=>{
        //         handleResult(g.next(data))
        //     }, error =>{
        //         g.throw(error) //捕获异常
        //     })
        // }
        // handleResult(g.next())

        // co生成器库
        function co (generator){
            const g = generator()
            function handleResult (result){
                if(result.done) return //当done结束后就返回不继续往下执行
                result.value.then(data=>{
                    handleResult(g.next(data))
                }, error =>{
                    g.throw(error) //捕获异常
                })
            }
            handleResult(g.next())
        }
        co(main)
    </script>
</body>
</html>